]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
shell-global: Don't connect to the stage's paint signal
authorAdel Gadllah <adel.gadllah@gmail.com>
Sat, 2 Mar 2013 12:25:37 +0000 (13:25 +0100)
committerAdel Gadllah <adel.gadllah@gmail.com>
Sat, 2 Mar 2013 13:43:11 +0000 (14:43 +0100)
Doing so causes useless full stage redraws and breaks culling
as clutter cannot know how the signal handler affects painting.

So use clutter_threads_add_repaint_func_full instead.

https://bugzilla.gnome.org/show_bug.cgi?id=694988

src/shell-global.c

index 6f20e8c2cfb8db17ca21436e6e6b54991bb7bf4c..7e091dbdf2f776b3d92f1b1ab5202fa38cb70d85 100644 (file)
@@ -803,16 +803,14 @@ global_stage_notify_height (GObject    *gobject,
 }
 
 static void
-global_stage_before_paint (ClutterStage *stage,
-                           ShellGlobal  *global)
+global_stage_before_paint (gpointer data)
 {
   shell_perf_log_event (shell_perf_log_get_default (),
                         "clutter.stagePaintStart");
 }
 
 static void
-global_stage_after_paint (ClutterStage *stage,
-                          ShellGlobal  *global)
+global_stage_after_paint (gpointer data)
 {
   shell_perf_log_event (shell_perf_log_get_default (),
                         "clutter.stagePaintDone");
@@ -939,10 +937,13 @@ _shell_global_set_plugin (ShellGlobal *global,
   g_signal_connect (global->stage, "notify::height",
                     G_CALLBACK (global_stage_notify_height), global);
 
-  g_signal_connect (global->stage, "paint",
-                    G_CALLBACK (global_stage_before_paint), global);
-  g_signal_connect_after (global->stage, "paint",
-                          G_CALLBACK (global_stage_after_paint), global);
+  clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_PRE_PAINT,
+                                         (GSourceFunc) global_stage_before_paint,
+                                         NULL, NULL);
+
+  clutter_threads_add_repaint_func_full (CLUTTER_REPAINT_FLAGS_POST_PAINT,
+                                         (GSourceFunc) global_stage_after_paint,
+                                         NULL, NULL);
 
   shell_perf_log_define_event (shell_perf_log_get_default(),
                                "clutter.stagePaintStart",